RAIS  3.2
C:/Projekte/RAIS/dataaccesslayer/MessageManagement.cs
Go to the documentation of this file.
00001 
00028 using System;
00029 using System.Collections.Generic;
00030 using System.Data;
00031 using System.Data.SqlClient;
00032 using System.Text;
00033 using System.Transactions;
00034 
00035 using RAIS.Common.MessageManagement;
00036 using RAIS.Common.TableManagement;
00037 using RAIS.Common.UserManagement;
00038 using ModificationTypes = System.Collections.Generic.Dictionary<RAIS.Common.MessageManagement.Message.ModificationType, RAIS.Common.MessageManagement.Message.ModificationTypeData>;
00039 using ValidationStatuses = System.Collections.Generic.Dictionary<RAIS.Common.MessageManagement.Message.ValidationStatus, RAIS.Common.MessageManagement.Message.ValidationStatusData>;
00040 using MessageTypes = System.Collections.Generic.Dictionary<RAIS.Common.MessageManagement.Message.MessageType, RAIS.Common.MessageManagement.Message.MessageTypeData>;
00041 using Messages = System.Collections.Generic.Dictionary<int, RAIS.Common.MessageManagement.Message>;
00042 
00043 namespace RAIS.DataAccessLayer
00044 {
00048     public class MessageManagement
00049         {
00050                 //*********************************************************************
00051                 #region Properties
00052 
00059                 public static ModificationTypes ModificationTypes
00060                 {
00061                         get { return GetModificationTypes(); }
00062                 }
00070                 public static ValidationStatuses ValidationStatuses
00071                 {
00072                         get { return GetValidationStatuses(); }
00073                 }
00074                 #endregion
00075                 //*********************************************************************
00076                 #region Constructor
00077                 static MessageManagement()
00078         {
00079                         Message.ModificationTypesDictionary = GetModificationTypes();
00080                         Message.ValidationStatusesDictionary = GetValidationStatuses();
00081                         Message.MessageTypesDictionary = GetMessageTypes();
00082                 }
00083         #endregion
00084                 //*********************************************************************
00085                 #region Public static methods
00086 
00091                 public static Messages GetInputMessagesByUser(UserData user)
00092                 {
00093                         Messages messages = new Messages();
00094 
00095                         using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
00096                         {
00097                                 sqlConnection.Open();
00098 
00099                                 using (SqlCommand sqlCommand = new SqlCommand(Constants.SP_NAME_GetMessagesByUserToID, sqlConnection))
00100                                 {
00101                                         int? validationStatus = null;
00102                                         int? userID = null;
00103                                         int? messageType = Message.MessageTypesDictionary[Message.MessageType.Validation].ID;
00104 
00105                                         if (user.FunctionalRole.Type == FunctionRole.FunctionRoleType.Administrator)
00106                                         {
00107                                                 if (user.Validator)
00108                                                         messageType = null;
00109                                                 else
00110                                                         messageType = Message.MessageTypesDictionary[Message.MessageType.AccountRequest].ID;
00111                                         }
00112 
00113                                         if (user.Validator || user.FunctionalRole.Type == FunctionRole.FunctionRoleType.Administrator)
00114                                                 validationStatus = MessageManagement.ValidationStatuses[Message.ValidationStatus.NotValidated].ID;
00115                                         else
00116                                                 userID = user.ID;
00117 
00118                                         sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
00119                                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_UserToID, userID);
00120                                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_MessageTypeID, messageType);
00121                                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_ValidationStatusID, validationStatus);
00122 
00123                                         using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())
00124                                         {
00125                                                 while (sqlReader.Read())
00126                                                 {
00127                                                         Message message = new Message(sqlReader);
00128                             
00129                                                         messages.Add(message.ID, message);
00130                                                 }
00131 
00132                         // check if destination user has restrictions, and if yes, check if they are met
00133                         // needs to be put in stored prozedure
00134                         List<int> messagesToRemove = new List<int>();
00135                         foreach (Message m in messages.Values)
00136                         {
00137                             // check if a user with no restrictions was taken over, thus this user has access to everything
00138                             List<UserAssignment> uas = RAIS.DataAccessLayer.UserManagement.GetUserAssignmentsForUser(user, m.TimeStamp);
00139 
00140                             // get MessageboxRestrictions of Target User, otherwise no filtering
00141                             List<MessageBoxRestriction> userToRestrictions = RAIS.DataAccessLayer.UserManagement.getAllActiveMessageBoxRestrictionsForUser(user, m.TimeStamp);
00142                             // also no filtering for account request messages
00143                             if (((userToRestrictions != null && userToRestrictions.Count > 0) || CheckUserAssignments(uas, m.TimeStamp)) && m.Type != Message.MessageType.AccountRequest)
00144                             {
00145                                 // If Source Users has a DataRole, retrieve it
00146                                 DataRole userFromDataRole = RAIS.DataAccessLayer.UserManagement.GetUserData(m.UserFromName).DataRole;
00147 
00148                                 bool hasRights = false;
00149 
00150                                 if (userFromDataRole != null)
00151                                 {
00152                                     hasRights = CheckRestrictionsByDataRole(userToRestrictions, userFromDataRole, user, RAIS.DataAccessLayer.UserManagement.GetUserData(m.UserFromName), m.TimeStamp);
00153                                 }
00154                                 else
00155                                 {
00156                                     // otherwise source user, has to have an assigned Facility
00157                                     Facility fac = RAIS.DataAccessLayer.UserManagement.GetUserData(m.UserFromName).Facility;
00158                                     hasRights = CheckRestrictionsByFacility(userToRestrictions, fac, user, m.TimeStamp);
00159                                 }
00160 
00161                                 if (!hasRights)
00162                                 {
00163                                     messagesToRemove.Add(m.ID);
00164                                 }
00165 
00166                             }
00167                             else
00168                             {
00169                                 // the user wont get all messages as long as he has any restrictions assigned to him, even if they're not active at the moment
00170                                 userToRestrictions = RAIS.DataAccessLayer.UserManagement.getAllActiveMessageBoxRestrictionsForUser(user);
00171                                 if (userToRestrictions != null && userToRestrictions.Count > 0)
00172                                     messagesToRemove.Add(m.ID);
00173                             }
00174                         } // end of message loop
00175 
00176                         foreach (int i in messagesToRemove)
00177                         {
00178                             messages.Remove(i);
00179                         }
00180                                         }
00181                                 }
00182                         }
00183                         return messages;
00184                 }
00185 
00186         public static List<Facility> getAllowedFacilitiesForRestriction(MessageBoxRestriction mbr, UserData user)
00187         {
00188             List<Facility> facs = new List<Facility>();
00189 
00190             using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
00191             {
00192                 sqlConnection.Open();
00193                 using (SqlCommand sqlCommand = new SqlCommand(Constants.SP_NAME_GetAllowedFacilityForRestrictionWithoutFunction, sqlConnection))
00194                 {
00195 
00196                     sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
00197                     DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_UserID, user.ID);
00198                     if(mbr.Region != null)
00199                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_RegionID, mbr.Region.ID);
00200                     else
00201                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_RegionID, DBNull.Value);
00202                     if (mbr.District != null && !mbr.DistrictName.Equals(RAIS.Common.Constants.ALL_DISTRICTS))
00203                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_DistrictID, mbr.District.ID);
00204                     else
00205                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_DistrictID, DBNull.Value);
00206                     if(mbr.Practice != null)
00207                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_PracticeID, mbr.Practice.ID);
00208                     else
00209                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_PracticeID, DBNull.Value);
00210 
00211                     using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())
00212                     {
00213                         while (sqlReader.Read())
00214                         {
00215                             Facility f = new Facility(sqlReader);
00216                             facs.Add(f);
00217                         }
00218                     }
00219                 }
00220             }
00221 
00222             return facs;
00223         }
00224 
00225         public static List<Facility> getAllowedFacilitiesForRestriction(DataRoleAttribute dra, UserData user)
00226         {
00227             List<Facility> facs = new List<Facility>();
00228 
00229             using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
00230             {
00231                 sqlConnection.Open();
00232                 using (SqlCommand sqlCommand = new SqlCommand(Constants.SP_NAME_GetAllowedFacilityForRestriction, sqlConnection))
00233                 {
00234 
00235                     sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
00236                     DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_UserID, user.ID);
00237                     if (dra.Region != null)
00238                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_RegionID, dra.Region.ID);
00239                     else
00240                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_RegionID, DBNull.Value);
00241                     if (dra.District != null && !dra.DistrictName.Equals(RAIS.Common.Constants.ALL_DISTRICTS))
00242                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_DistrictID, dra.District.ID);
00243                     else
00244                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_DistrictID, DBNull.Value);
00245                     
00246                     DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_PracticeID, DBNull.Value);
00247 
00248                     using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())
00249                     {
00250                         while (sqlReader.Read())
00251                         {
00252                             Facility f = new Facility(sqlReader);
00253                             facs.Add(f);
00254                         }
00255                     }
00256                 }
00257             }
00258 
00259             return facs;
00260         }
00261 
00265         private static bool CheckUserAssignments(List<UserAssignment> uas, DateTime messageTime)
00266         {
00267             List<MessageBoxRestriction> rest = null;
00268             foreach (UserAssignment ua in uas)
00269             {
00270                 rest = RAIS.DataAccessLayer.UserManagement.getActiveMessageBoxRestrictionsForUser(ua.TakenOverUser, messageTime);
00271                 if (rest != null && rest.Count > 0)
00272                 {
00273                     return true;
00274                 }
00275             }
00276             return false;
00277         }
00278 
00279         private static bool CheckRestrictionsByFacility(List<MessageBoxRestriction> mbrsToCheck, Facility facility, UserData user, DateTime messageDate)
00280         {
00281             Region region = DataAccessLayer.UserManagement.GetRegionForFacility(facility);
00282 
00283             // if region is null, data is corrupt, dont include message
00284             // UPDATE: this is apparantly not the case => removed check
00285             // if (region == null)
00286             //   return false;
00287 
00288             foreach (MessageBoxRestriction mbr in mbrsToCheck)
00289             {
00290                 if (mbr.ValidFrom <= messageDate && messageDate <= mbr.ValidUntil)
00291                 {
00292                     List<Facility> allowedFacilites = getAllowedFacilitiesForRestriction(mbr, user);
00293 
00294                     if (mbr.Facility != null)
00295                     {
00296                         if (!(mbr.Facility.Name.Equals(RAIS.Common.Constants.ALL_FACILITIES) ||
00297                             mbr.Facility.Name.Equals(RAIS.Common.Constants.ALL_FACILITIES_UNKNOWN)))
00298                         {
00299                             allowedFacilites.Clear();
00300                             allowedFacilites.Add(mbr.Facility);
00301                         }
00302                         else if(mbr.Practice != null)
00303                         {
00304                             allowedFacilites.AddRange(RAIS.DataAccessLayer.UserManagement.getFacilitiesByPractice(mbr.Practice.ID));
00305                         }
00306                     }
00307 
00308                     foreach (Facility allowedFac in allowedFacilites)
00309                     {
00310                         if (allowedFac.ID == facility.ID || (allowedFac.Name.Equals(RAIS.Common.Constants.ALL_FACILITIES) ||
00311                             allowedFac.Name.Equals(RAIS.Common.Constants.ALL_FACILITIES_UNKNOWN)))
00312                             return true;
00313                     }
00314                 }
00315             }
00316                  
00317             return false;
00318         }
00319 
00320         private static bool CheckRestrictionsByDataRole(List<MessageBoxRestriction> mbrsToCheck, DataRole fromDataRole, UserData user, UserData messageUser, DateTime messageDate)
00321         {
00322 
00323             foreach (MessageBoxRestriction mbr in mbrsToCheck)
00324             {
00325                 if (mbr.ValidFrom <= messageDate && messageDate <= mbr.ValidUntil)
00326                 {
00327                     List<Facility> allowedFacilites = getAllowedFacilitiesForRestriction(mbr, user);
00328 
00329                     if (mbr.Facility != null)
00330                     {
00331                         if (!(mbr.Facility.Name.Equals(RAIS.Common.Constants.ALL_FACILITIES) ||
00332                             mbr.Facility.Name.Equals(RAIS.Common.Constants.ALL_FACILITIES_UNKNOWN)))
00333                         {
00334                             allowedFacilites.Clear();
00335                             allowedFacilites.Add(mbr.Facility);
00336                         }
00337                     }
00338 
00339                     foreach (DataRoleAttribute draFrom in fromDataRole.Attributes.Values)
00340                     {
00341                         List<Facility> givenFacilities = getAllowedFacilitiesForRestriction(draFrom, messageUser);
00342 
00343                         if (draFrom.Facility != null)
00344                         {
00345                             if (!(draFrom.Facility.Name.Equals(RAIS.Common.Constants.ALL_FACILITIES) ||
00346                                 draFrom.Facility.Name.Equals(RAIS.Common.Constants.ALL_FACILITIES_UNKNOWN)))
00347                             {
00348                                 givenFacilities.Clear();
00349                                 givenFacilities.Add(draFrom.Facility);
00350                             }
00351                         }
00352 
00353                         foreach (Facility f in allowedFacilites)
00354                         {
00355                             foreach (Facility f2 in givenFacilities)
00356                             {
00357                                 if (f.ID == f2.ID)
00358                                     return true;
00359                             }
00360                         }
00361 
00362                     }
00363                 }
00364             }
00365 
00366             return false;
00367         }
00368 
00374                 public static Message GetOpenAccountRequest(UserData user)
00375                 {
00376                         Message accountRequest = null;
00377 
00378                         using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
00379                         {
00380                                 sqlConnection.Open();
00381 
00382                                 using (SqlCommand sqlCommand = new SqlCommand(Constants.SP_NAME_GetOpenAccountRequestByUserID, sqlConnection))
00383                                 {
00384                                         sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
00385                                         DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_UserID, user.ID);
00386 
00387                                         using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())
00388                                         {
00389                                                 sqlReader.Read();
00390 
00391                                                 if (sqlReader.HasRows)
00392                                                 {
00393                                                         accountRequest = new Message(sqlReader);
00394                                                 }
00395                                         }
00396                                 }
00397                         }
00398                         return accountRequest;
00399                 }
00406                 public static bool AddMessage(Message message, ref string returnMessage)
00407                 {
00408                         try
00409                         {
00410                                 using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
00411                                 {
00412                                         sqlConnection.Open();
00413 
00414                                         using (SqlCommand sqlCommand = new SqlCommand(Constants.SP_NAME_AddMessage, sqlConnection))
00415                                         {
00416                                                 sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
00417                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_MessageID, message.ID, ParameterDirection.Output);
00418                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_UserFromID, message.UserFromID);
00419                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_UserToID, message.UserToID);
00420                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_TableID, message.TableID);
00421                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_RowID, message.RowID);
00422                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_Comment, message.Comment);
00423                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_ModificationTypeID, message.ModificationData.ID);
00424                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_ValidationStatusID, message.ValidationData.ID);
00425                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_MessageTypeID, message.TypeData.ID);
00426 
00427                                                 sqlCommand.ExecuteNonQuery();
00428 
00429                                                 message.ID = int.Parse(sqlCommand.Parameters[Constants.SP_PARAMETER_MessageID].Value.ToString());
00430                                         }
00431                                 }
00432                                 returnMessage = RAIS.Common.Messages.MESSAGE_ADDED;
00433                                 return true;
00434                         }
00435                         catch (Exception excep)
00436                         {
00437                 returnMessage = excep.Message + Constants.DATA_BASE_ERROR_MASSAGE;
00438                                 return false;
00439                         }
00440                 }
00447                 public static bool SaveMessage(Message message, ref string returnMessage)
00448                 {
00449                         try
00450                         {
00451                                 using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
00452                                 {
00453                                         sqlConnection.Open();
00454 
00455                                         using (SqlCommand sqlCommand = new SqlCommand(Constants.SP_NAME_UpdateMessage, sqlConnection))
00456                                         {
00457                                                 sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
00458                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_MessageID, message.ID);
00459                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_Comment, message.Comment);
00460                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_ValidationStatusID, message.ValidationData.ID);
00461 
00462                                                 sqlCommand.ExecuteNonQuery();
00463                                         }
00464                                 }
00465                                 returnMessage = RAIS.Common.Messages.MESSAGE_SAVED;
00466                                 return true;
00467                         }
00468                         catch (Exception excep)
00469                         {
00470                 returnMessage = excep.Message + Constants.DATA_BASE_ERROR_MASSAGE;
00471                                 return false;
00472                         }
00473                 }
00480                 public static bool SaveMessageHistoryRowID(int messageID, int historyRowID, ref string returnMessage)
00481                 {
00482                         try
00483                         {
00484                                 using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
00485                                 {
00486                                         sqlConnection.Open();
00487 
00488                                         using (SqlCommand sqlCommand = new SqlCommand(Constants.SP_NAME_UpdateMessageHistoryRowID, sqlConnection))
00489                                         {
00490                                                 sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
00491                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_MessageID, messageID);
00492                                                 DataAccessUtilities.AddParameter(sqlCommand, Constants.SP_PARAMETER_HistoryRowID, historyRowID);
00493 
00494                                                 sqlCommand.ExecuteNonQuery();
00495                                         }
00496                                 }
00497                                 returnMessage = RAIS.Common.Messages.MESSAGE_SAVED;
00498                                 return true;
00499                         }
00500                         catch (Exception excep)
00501                         {
00502                 returnMessage = excep.Message + Constants.DATA_BASE_ERROR_MASSAGE;
00503                                 return false;
00504                         }
00505                 }
00511                 public static ValidationData GetValidationDataByMessage(Message message, UserData user)
00512                 {
00513                         string sqlString = string.Empty;
00514                         ValidationData validationData = new ValidationData();
00515 
00516                         validationData.Message = message;
00517                         validationData.Table = TableManagement.GetTableWithRelatedFieldsByTableID(message.TableID);
00518                         validationData.HistoryTable = TableManagement.GetTableWithRelatedFieldsByTableName(validationData.Table.HistoryTableName);
00519 
00520                         sqlString = GetSelectValidationString(validationData.Table, message.RowID);
00521                         validationData.ValidationDataAdapter = GetDataAdapter(sqlString, validationData.ValidationDataSet);
00522 
00523                         if (validationData.ValidationDataSet.Tables[0].Rows.Count > 0)
00524                         {
00525                                 DataRow validationRow = validationData.ValidationDataSet.Tables[0].Rows[0];
00526                                 validationData.ValidationRowValues =
00527                                         DynamicMaskManagement.FillFieldDataListFromTableRow(validationData.Table, validationRow, true, user.ID);
00528 
00529                                 if (validationData.ValidationDataSet.Tables[0].Rows.Count > 0)
00530                                 {
00531                                         int rowID = 0;
00532                                         if (!(validationData.ValidationDataSet.Tables[0].Rows[0][validationData.Table.ForeignKeyFieldName] is DBNull))
00533                                         {
00534                                                 rowID = (int)validationData.ValidationDataSet.Tables[0].Rows[0][validationData.Table.ForeignKeyFieldName];
00535                                         }
00536                                         string[] sqlStrings = DynamicMaskManagement.GetSelectStrings(validationData.Table, 0, 0, rowID, (rowID == 0));
00537                                         validationData.DataAdapter = 
00538                                                 DynamicMaskManagement.GetDataAdapter(
00539                                                           sqlStrings[(int)DynamicMaskManagement.SelectType.MainSelect]
00540                                                         , sqlStrings[(int)DynamicMaskManagement.SelectType.ForInsert]
00541                                                         , validationData.DataSet);
00542 
00543                                         if (validationData.DataSet.Tables[0].Rows.Count > 0)
00544                                         {
00545                                                 DataRow currentRow = validationData.DataSet.Tables[0].Rows[0];
00546                                                 validationData.CurrentRowValues =
00547                                                         DynamicMaskManagement.FillFieldDataListFromTableRow(validationData.Table, currentRow, false, user.ID);
00548                                         }
00549                                         else
00550                                         {
00551                                                 validationData.CurrentRowValues =
00552                                                         DynamicMaskManagement.FillFieldDataListFromTableRow(validationData.Table, null, false, user.ID);
00553                                         }
00554                                 }
00555                         }
00556 
00557                         if (validationData.Table.WithHistoryValidation)
00558                         {
00559                                 sqlString = GetSelectValidationString(validationData.HistoryTable, message.HistoryRowID);
00560                                 validationData.ValidationHistoryDataAdapter = GetDataAdapter(sqlString, validationData.ValidationHistoryDataSet);
00561 
00562                                 if (validationData.ValidationHistoryDataSet.Tables[0].Rows.Count > 0)
00563                                 {
00564                                         DataRow validationHistoryRow = validationData.ValidationHistoryDataSet.Tables[0].Rows[0];
00565                                         validationData.ValidationHistoryRowValues =
00566                                                 DynamicMaskManagement.FillFieldDataListFromTableRow(validationData.HistoryTable, validationHistoryRow, true, user.ID);
00567 
00568                                         if (validationData.ValidationHistoryDataSet.Tables[0].Rows.Count > 0)
00569                                         {
00570                                                 int rowID = 0;
00571                                                 if (!(validationData.ValidationHistoryDataSet.Tables[0].Rows[0][validationData.HistoryTable.ForeignKeyFieldName] is DBNull))
00572                                                 {
00573                                                         rowID = (int)validationData.ValidationDataSet.Tables[0].Rows[0][validationData.Table.ForeignKeyFieldName];
00574                                                 }
00575                                                 string[] sqlStrings = DynamicMaskManagement.GetSelectStrings(validationData.HistoryTable, 0, 0, rowID, (rowID == 0));
00576                                                 validationData.HistoryDataAdapter =
00577                                                         DynamicMaskManagement.GetDataAdapter(
00578                                                                   sqlStrings[(int)DynamicMaskManagement.SelectType.MainSelect]
00579                                                                 , sqlStrings[(int)DynamicMaskManagement.SelectType.ForInsert]
00580                                                                 , validationData.HistoryDataSet);
00581 
00582                                                 if (validationData.HistoryDataSet.Tables[0].Rows.Count > 0)
00583                                                 {
00584                                                         DataRow currentRow = validationData.HistoryDataSet.Tables[0].Rows[0];
00585                                                         validationData.HistoryRowValues =
00586                                                                 DynamicMaskManagement.FillFieldDataListFromTableRow(validationData.HistoryTable, currentRow, false, user.ID);
00587                                                 }
00588                                                 else
00589                                                 {
00590                                                         validationData.HistoryRowValues =
00591                                                                 DynamicMaskManagement.FillFieldDataListFromTableRow(validationData.HistoryTable, null, false, user.ID);
00592                                                 }
00593                                         }
00594                                 }
00595                         }
00596 
00597                         return validationData;
00598                 }
00603                 public static bool ReleaseChanges(Message message, ref string actionMessage, UserData user)
00604                 {
00605                         try
00606                         {
00607                                 bool isInsertionNeeded = false;
00608                                 bool isDeletionNeeded = false;
00609 
00610                                 ValidationData validationData = GetValidationDataByMessage(message, user);
00611                                 validationData.Message.Validation = Message.ValidationStatus.Released;
00612 
00613                                 if (validationData.Message.Modification == Message.ModificationType.Delete)
00614                                 {
00615                                         validationData.DataSet.Tables[0].Rows[0].Delete();
00616                                 }
00617                                 else
00618                                 {
00619                                         if (validationData.Message.Modification == Message.ModificationType.Add)
00620                                         {
00621                                                 validationData.DataSet.Tables[0].Rows.Add();
00622 
00623                                                 if (validationData.Table.WithHistoryValidation)
00624                                                         validationData.HistoryDataSet.Tables[0].Rows.Add();
00625                                         }
00626 
00627                                         // Fill DataSet values from ValidationDataSet
00628                                         FillDataSetFromValidationDataSet(validationData.CurrentRowValues
00629                                                 , validationData.ValidationRowValues
00630                                                 , validationData.DataSet
00631                                                 , validationData.ValidationDataSet
00632                                                 , ref isInsertionNeeded
00633                                                 , ref isDeletionNeeded);
00634                                         validationData.MultilookupInsertionNeeded = isInsertionNeeded;
00635                                         validationData.MultilookupDeletionNeeded = isDeletionNeeded;
00636 
00637                                         if (validationData.Table.WithHistoryValidation
00638                                                 && validationData.Message.Modification == Message.ModificationType.Add)
00639                                         {
00640                                                 FillDataSetFromValidationDataSet(validationData.HistoryRowValues
00641                                                         , validationData.ValidationHistoryRowValues
00642                                                         , validationData.HistoryDataSet
00643                                                         , validationData.ValidationHistoryDataSet
00644                                                         , ref isInsertionNeeded
00645                                                         , ref isDeletionNeeded);
00646                                                 validationData.HistoryMultilookupInsertionNeeded = isInsertionNeeded;
00647                                                 validationData.HistoryMultilookupDeletionNeeded = isDeletionNeeded;
00648                                         }
00649                                 }
00650 
00651                                 // Set validation status
00652                                 validationData.ValidationDataSet.Tables[0].Rows[0]["FK Validation Status ID"] =
00653                                         MessageManagement.ValidationStatuses[Message.ValidationStatus.Released].ID;
00654 
00655                                 if (validationData.Table.WithHistoryValidation
00656                                         && validationData.Message.Modification == Message.ModificationType.Add)
00657                                 {
00658                                         validationData.ValidationHistoryDataSet.Tables[0].Rows[0]["FK Validation Status ID"] =
00659                                                 MessageManagement.ValidationStatuses[Message.ValidationStatus.Released].ID;
00660                                 }
00661 
00662                                 // Save changes
00663                                 using (TransactionScope ts = new TransactionScope())
00664                                 {
00665                                         string errorMessage = string.Empty;
00666                                         bool success;
00667 
00668                                         success = SaveMessage(validationData.Message, ref errorMessage);
00669                                         if (!success)
00670                                                 throw new Exception(errorMessage);
00671 
00672                                         // Call Update for main table
00673                                         validationData.DataAdapter.Update(validationData.DataSet);
00674 
00675                                         if (validationData.Message.Modification == Message.ModificationType.Add)
00676                                         {
00677                                                 validationData.ValidationDataSet.Tables[0].Rows[0][validationData.Table.ForeignKeyFieldName] =
00678                                                         validationData.DataSet.Tables[0].Rows[0][validationData.Table.PrimaryKeyFieldName];
00679                                         }
00680                 
00681                                         validationData.ValidationDataAdapter.Update(validationData.ValidationDataSet);
00682 
00683                                         if (validationData.MultilookupInsertionNeeded)
00684                                                 InsertMultilookupValues(validationData.Table, validationData.DataSet.Tables[0].Rows[0], validationData.CurrentRowValues);
00685 
00686                                         if (validationData.MultilookupDeletionNeeded)
00687                                                 DeleteMultilookupValues(validationData.Table, validationData.DataSet.Tables[0].Rows[0], validationData.CurrentRowValues);
00688 
00689                                         // Call Update for history table
00690                                         if (validationData.Table.WithHistoryValidation
00691                                                 && validationData.Message.Modification == Message.ModificationType.Add)
00692                                         {
00693                                                 if (validationData.Message.Modification == Message.ModificationType.Add)
00694                                                 {
00695                                                         validationData.HistoryDataSet.Tables[0].Rows[0][validationData.Table.ForeignKeyFieldName] =
00696                                                                 validationData.DataSet.Tables[0].Rows[0][validationData.Table.PrimaryKeyFieldName];
00697                                                 }
00698 
00699                                                 validationData.HistoryDataAdapter.Update(validationData.HistoryDataSet);
00700 
00701                                                 if (validationData.Message.Modification == Message.ModificationType.Add)
00702                                                 {
00703                                                         validationData.ValidationHistoryDataSet.Tables[0].Rows[0][validationData.Table.ForeignKeyFieldName] =
00704                                                                 validationData.DataSet.Tables[0].Rows[0][validationData.Table.PrimaryKeyFieldName];
00705                                                         validationData.ValidationHistoryDataSet.Tables[0].Rows[0][validationData.HistoryTable.ForeignKeyFieldName] =
00706                                                                 validationData.HistoryDataSet.Tables[0].Rows[0][validationData.HistoryTable.PrimaryKeyFieldName];
00707                                                 }
00708                                                 
00709                                                 validationData.ValidationHistoryDataAdapter.Update(validationData.ValidationHistoryDataSet);
00710 
00711                                                 if (validationData.HistoryMultilookupInsertionNeeded)
00712                                                         InsertMultilookupValues(validationData.HistoryTable, validationData.HistoryDataSet.Tables[0].Rows[0], validationData.HistoryRowValues);
00713 
00714                                                 if (validationData.HistoryMultilookupDeletionNeeded)
00715                                                         DeleteMultilookupValues(validationData.HistoryTable, validationData.HistoryDataSet.Tables[0].Rows[0], validationData.HistoryRowValues);
00716                                         }
00717 
00718                                         CreateAnswerMessage(validationData.Message, user);
00719 
00720                                         ts.Complete();
00721                                 }
00722                                 
00723                                 // Create return message
00724                                 switch (validationData.Message.Modification)
00725                                 {
00726                                         case Message.ModificationType.Add:
00727                                                 actionMessage = RAIS.Common.Messages.RECORD_ADDED;
00728                                                 break;
00729                                         case Message.ModificationType.Edit:
00730                                                 actionMessage = RAIS.Common.Messages.CHANGES_SAVED;
00731                                                 break;
00732                                         case Message.ModificationType.Delete:
00733                                                 actionMessage = RAIS.Common.Messages.RECORD_DELETED;
00734                                                 break;
00735                                 }
00736                         }
00737                         catch (Exception exep)
00738                         {
00739                 actionMessage = exep.Message + Constants.DATA_BASE_ERROR_MASSAGE;
00740                                 return false;
00741                         }
00742 
00743                         return true;
00744                 }
00749                 public static bool RejectChanges(Message message, ref string actionMessage, UserData user)
00750                 {
00751                         try
00752                         {
00753                                 ValidationData validationData = GetValidationDataByMessage(message, user);
00754                                 validationData.Message.Validation = Message.ValidationStatus.Rejected;
00755 
00756                                 validationData.ValidationDataSet.Tables[0].Rows[0]["FK Validation Status ID"] =
00757                                         MessageManagement.ValidationStatuses[Message.ValidationStatus.Rejected].ID;
00758 
00759                                 // Save changes
00760                                 using (TransactionScope ts = new TransactionScope())
00761                                 {
00762                                         string errorMessage = "";
00763                                         bool success;
00764 
00765                                         success = SaveMessage(validationData.Message, ref errorMessage);
00766                                         if (!success)
00767                                                 throw new Exception(errorMessage);
00768 
00769                                         validationData.ValidationDataAdapter.Update(validationData.ValidationDataSet);
00770 
00771                                         CreateAnswerMessage(validationData.Message, user);
00772 
00773                                         ts.Complete();
00774                                 }
00775 
00776                                 // Create return message
00777                                 actionMessage = RAIS.Common.Messages.CHANGES_REJECTED;
00778                         }
00779                         catch (Exception exep)
00780                         {
00781                 actionMessage = exep.Message + Constants.DATA_BASE_ERROR_MASSAGE;
00782                                 return false;
00783                         }
00784 
00785                         return true;
00786                 }
00787 
00788                 public static void CreateAnswerMessage(Message validationMessage, UserData validator)
00789                 {
00790                         bool success;
00791                         string errorMessage = "";
00792 
00793                         Message message = new Message();
00794                         message.UserFromID = validator.ID;
00795                         message.UserToID = validationMessage.UserFromID;
00796                         message.TableID = validationMessage.TableID;
00797                         message.RowID = validationMessage.RowID;
00798                         message.Modification = validationMessage.Modification;
00799                         message.Validation = validationMessage.Validation;
00800                         message.Comment = validationMessage.Comment;
00801 
00802                         success = MessageManagement.AddMessage(message, ref errorMessage);
00803                         if (!success)
00804                                 throw new Exception(errorMessage);
00805                 }
00806                 #endregion
00807                 //*********************************************************************
00808                 #region Private static helper functions
00809 
00814                 static ModificationTypes GetModificationTypes()
00815                 {
00816                         ModificationTypes modificationTypes = new ModificationTypes();
00817                         using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
00818                         {
00819                                 sqlConnection.Open();
00820 
00821                                 using (SqlCommand sqlCommand = new SqlCommand(Constants.SP_NAME_GetModificationTypes, sqlConnection))
00822                                 {
00823                                         sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
00824 
00825                                         using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())
00826                                         {
00827                                                 while (sqlReader.Read())
00828                                                 {
00829                                                         Message.ModificationTypeData modificationTypeData = new Message.ModificationTypeData(sqlReader);
00830 
00831                                                         Message.ModificationType modificationType;
00832                                                         try
00833                                                         {
00834                                                                 // Next operator throw an exeption if we do not have 
00835                                                                 // element in enum which corresponds to modification type in Modification Type table
00836                                                                 // Catch it and throw exception with more clear message.
00837                                                                 modificationType = modificationTypeData.Type;
00838                                                         }
00839                                                         catch
00840                                                         {
00841                                                                 throw new Exception("Modification type " + modificationTypeData.VisibleName + " exists in DB but does not exist in Enum Message.ModificationType. The running ASP server is not up to date with respect to the DB.");
00842                                                         }
00843 
00844                                                         modificationTypes.Add(modificationType, modificationTypeData);
00845                                                 }
00846 
00847                                                 // We checked that all enum elements exist in [Modification Type] table, 
00848                                                 // so throw an exeption if number of elements in enum does not 
00849                                                 // equal number of elements in [Modification Type] table
00850                                                 if (Enum.GetNames(typeof(Message.ModificationType)).Length != modificationTypes.Count)
00851                                                         throw new Exception("There are modification types which exist in Enum Message.ModificationType but does not exist in DB. The running DB is not up to date with respect to the ASP server.");
00852                                         }
00853                                 }
00854                         }
00855 
00856                         return modificationTypes;
00857                 }
00863                 static ValidationStatuses GetValidationStatuses()
00864                 {
00865                         ValidationStatuses validationStatuses = new ValidationStatuses();
00866                         using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
00867                         {
00868                                 sqlConnection.Open();
00869 
00870                                 using (SqlCommand sqlCommand = new SqlCommand(Constants.SP_NAME_GetValidationStatuses, sqlConnection))
00871                                 {
00872                                         sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
00873 
00874                                         using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())
00875                                         {
00876                                                 while (sqlReader.Read())
00877                                                 {
00878                                                         Message.ValidationStatusData validationStatusData = new Message.ValidationStatusData(sqlReader);
00879 
00880                                                         Message.ValidationStatus validationStatus;
00881                                                         try
00882                                                         {
00883                                                                 // Next operator throw an exeption if we do not have 
00884                                                                 // element in enum which corresponds to validation status in Validation Status table
00885                                                                 // Catch it and throw exception with more clear message.
00886                                                                 validationStatus = validationStatusData.Type;
00887                                                         }
00888                                                         catch
00889                                                         {
00890                                                                 throw new Exception("Validation status " + validationStatusData.VisibleName + " exists in DB but does not exist in Enum Message.ValidationStatus. The running ASP server is not up to date with respect to the DB.");
00891                                                         }
00892 
00893                                                         validationStatuses.Add(validationStatus, validationStatusData);
00894                                                 }
00895 
00896                                                 // We checked that all enum elements exist in [Validation Status] table, 
00897                                                 // so throw an exeption if number of elements in enum does not 
00898                                                 // equal number of elements in [Validation Status] table
00899                                                 if (Enum.GetNames(typeof(Message.ValidationStatus)).Length != validationStatuses.Count)
00900                                                         throw new Exception("There are validation statuses which exist in Enum Message.ValidationStatus but does not exist in DB. The running DB is not up to date with respect to the ASP server.");
00901                                         }
00902                                 }
00903                         }
00904 
00905                         return validationStatuses;
00906                 }
00912                 static MessageTypes GetMessageTypes()
00913                 {
00914                         MessageTypes messageTypes = new MessageTypes();
00915                         using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
00916                         {
00917                                 sqlConnection.Open();
00918 
00919                                 using (SqlCommand sqlCommand = new SqlCommand(Constants.SP_NAME_GetMessageTypes, sqlConnection))
00920                                 {
00921                                         sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
00922 
00923                                         using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())
00924                                         {
00925                                                 while (sqlReader.Read())
00926                                                 {
00927                                                         Message.MessageTypeData messageTypeData = new Message.MessageTypeData(sqlReader);
00928 
00929                                                         Message.MessageType messageType;
00930                                                         try
00931                                                         {
00932                                                                 // Next operator throw an exeption if we do not have 
00933                                                                 // element in enum which corresponds to message type in Message Type table
00934                                                                 // Catch it and throw exception with more clear message.
00935                                                                 messageType = messageTypeData.Type;
00936                                                         }
00937                                                         catch
00938                                                         {
00939                                                                 throw new Exception("Message type " + messageTypeData.VisibleName + " exists in DB but does not exist in Enum Message.MessageType. The running ASP server is not up to date with respect to the DB.");
00940                                                         }
00941 
00942                                                         messageTypes.Add(messageType, messageTypeData);
00943                                                 }
00944 
00945                                                 // We checked that all enum elements exist in [Message Type] table, 
00946                                                 // so throw an exeption if number of elements in enum does not 
00947                                                 // equal number of elements in [Message Type] table
00948                                                 if (Enum.GetNames(typeof(Message.MessageType)).Length != messageTypes.Count)
00949                                                         throw new Exception("There are message types which exist in Enum Message.MessageType but does not exist in DB. The running DB is not up to date with respect to the ASP server.");
00950                                         }
00951                                 }
00952                         }
00953 
00954                         return messageTypes;
00955                 }
00961                 static int GetValidationStatusIDByValidationStatus(Message.ValidationStatus validationStatus)
00962                 {
00963                         return GetValidationStatuses()[validationStatus].ID;
00964                 }
00965 
00966                 static string GetSelectValidationString(Table table, int rowID)
00967                 {
00968                         string sqlString = "";
00969 
00970                         sqlString = string.Format(
00971                                         "SELECT * FROM [{0}] WHERE [{1}] = {2}"
00972                                         , table.ValidationTableName, table.ValidationPrimaryKeyFieldName, rowID);
00973 
00974                         return sqlString;
00975                 }
00976 
00977                 static string GetSelectString(Table table, int rowID)
00978                 {
00979                         string sqlString = "";
00980 
00981                         sqlString = string.Format(
00982                                         "SELECT * FROM [{0}] WHERE [{1}] = {2}"
00983                                         , table.Name, table.PrimaryKeyFieldName, rowID);
00984 
00985                         return sqlString;
00986                 }
00996                 static SqlDataAdapter GetDataAdapter(string sqlString, DataSet dataSet)
00997                 {
00998                         SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlString, DataAccessUtilities.ConnectionString);
00999                         SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter);
01000 
01001                         // Fill DataSet
01002                         dataAdapter.Fill(dataSet);
01003 
01004                         return dataAdapter;
01005                 }
01006 
01007                 static void InsertMultilookupValues(Table table, DataRow row, List<FieldData> rowValues)
01008                 {
01009                         using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
01010                         {
01011                                 sqlConnection.Open();
01012 
01013                                 using (SqlCommand sqlCommand = new SqlCommand(string.Empty, sqlConnection))
01014                                 {
01015                                         sqlCommand.CommandType = System.Data.CommandType.Text;
01016                                         foreach (FieldData fieldData in rowValues)
01017                                         {
01018                                                 if (fieldData.MultiLookupToInsert != null
01019                                                         && fieldData.MultiLookupToInsert.Count != 0)
01020                                                 {
01021                                                         foreach (KeyValuePair<int, string> kvp in fieldData.MultiLookupToInsert)
01022                                                         {
01023                                                                 string sqlString;
01024 
01025                                                                 sqlString = string.Format(
01026                                                                                 "INSERT [{0}]"
01027                                                                                         + " ([{0}].[{1}], [{0}].[{2}])"
01028                                                                                         + " VALUES "
01029                                                                                         + "({3}, {4})"
01030                                                                                 , table.Name + " " + fieldData.Field.RelatedTable.Name
01031                                                                                 , table.MultipleLookupForeignKey
01032                                                                                 , fieldData.Field.ForeignKeyFieldName
01033                                                                                 , row[table.PrimaryKeyFieldName]
01034                                                                                 , kvp.Key
01035                                                                                 );
01036 
01037                                                                 sqlCommand.CommandText = sqlString;
01038                                                                 sqlCommand.ExecuteNonQuery();
01039                                                         }
01040                                                 }
01041                                         }
01042                                 }
01043                         }
01044                 }
01045 
01046                 static void DeleteMultilookupValues(Table table, DataRow row, List<FieldData> rowValues)
01047                 {
01048                         using (SqlConnection sqlConnection = new SqlConnection(DataAccessUtilities.ConnectionString))
01049                         {
01050                                 sqlConnection.Open();
01051 
01052                                 using (SqlCommand sqlCommand = new SqlCommand(string.Empty, sqlConnection))
01053                                 {
01054                                         sqlCommand.CommandType = System.Data.CommandType.Text;
01055                                         foreach (FieldData fieldData in rowValues)
01056                                         {
01057                                                 if (fieldData.MultiLookupToDelete != null
01058                                                         && fieldData.MultiLookupToDelete.Count != 0)
01059                                                 {
01060                                                         foreach (KeyValuePair<int, string> kvp in fieldData.MultiLookupToDelete)
01061                                                         {
01062                                                                 string sqlString;
01063 
01064                                                                 sqlString = string.Format(
01065                                                                                 "DELETE FROM [{0}]"
01066                                                                                         + " WHERE [{0}].[{1}] = {3} AND [{0}].[{2}] = {4}"
01067                                                                                 , table.Name + " " + fieldData.Field.RelatedTable.Name
01068                                                                                 , table.MultipleLookupForeignKey
01069                                                                                 , fieldData.Field.ForeignKeyFieldName
01070                                                                                 , row[table.PrimaryKeyFieldName]
01071                                                                                 , kvp.Key
01072                                                                                 );
01073 
01074                                                                 sqlCommand.CommandText = sqlString;
01075                                                                 sqlCommand.ExecuteNonQuery();
01076                                                         }
01077                                                 }
01078                                         }
01079                                 }
01080                         }
01081                 }
01082 
01083                 static void FillDataSetFromValidationDataSet(List<FieldData> rowValues, List<FieldData> validationRowValues
01084                         , DataSet dataSet, DataSet validationDataSet, ref bool isInsertionNeeded, ref bool isDeletionNeeded)
01085                 {
01086                         isInsertionNeeded = false;
01087                         isDeletionNeeded = false;
01088 
01089                         int i = 0;
01090                         foreach (FieldData fieldData in rowValues)
01091                         {
01092 
01093                                 if (fieldData.Field.Type != Field.FieldType.MultipleLookup
01094                                         && fieldData.Field.Type != Field.FieldType.SingleLookup
01095                                         && fieldData.Field.Type != Field.FieldType.Label)
01096                                 {
01097                                         dataSet.Tables[0].Rows[0][fieldData.Field.Name] =
01098                                                 validationDataSet.Tables[0].Rows[0][fieldData.Field.Name];
01099                                 }
01100 
01101                                 if (fieldData.Field.Type == Field.FieldType.SingleLookup
01102                                         || fieldData.Field.Type == Field.FieldType.LookupPlusIntegerValue
01103                                         || fieldData.Field.Type == Field.FieldType.LookupPlusScientificValue)
01104                                 {
01105                                         dataSet.Tables[0].Rows[0][fieldData.Field.ForeignKeyFieldName] =
01106                                                 validationDataSet.Tables[0].Rows[0][fieldData.Field.ForeignKeyFieldName];
01107                                 }
01108 
01109                                 if (fieldData.Field.Type == Field.FieldType.MultipleLookup)
01110                                 {
01111                                         FieldData validationFieldData =
01112                                                 validationRowValues[i];
01113 
01114                                         fieldData.NewMultiLookupValues = validationFieldData.SelectedMultiLookupValues;
01115 
01116                                         if (fieldData.MultiLookupToInsert == null)
01117                                                 fieldData.MultiLookupToInsert = new Dictionary<int, string>();
01118                                         else
01119                                                 fieldData.MultiLookupToInsert.Clear();
01120 
01121                                         foreach (KeyValuePair<int, string> kvp in fieldData.NewMultiLookupValues)
01122                                         {
01123                                                 if (!fieldData.SelectedMultiLookupValues.ContainsKey(kvp.Key))
01124                                                 {
01125                                                         fieldData.MultiLookupToInsert.Add(kvp.Key, kvp.Value);
01126                                                         isInsertionNeeded = true;
01127                                                 }
01128                                         }
01129 
01130                                         if (fieldData.MultiLookupToDelete == null)
01131                                                 fieldData.MultiLookupToDelete = new Dictionary<int, string>();
01132                                         else
01133                                                 fieldData.MultiLookupToDelete.Clear();
01134 
01135                                         if (fieldData.NewMultiLookupValues == null)
01136                                                 fieldData.NewMultiLookupValues = new Dictionary<int, string>();
01137 
01138                                         foreach (KeyValuePair<int, string> kvp in fieldData.SelectedMultiLookupValues)
01139                                         {
01140                                                 if (!fieldData.NewMultiLookupValues.ContainsKey(kvp.Key))
01141                                                 {
01142                                                         fieldData.MultiLookupToDelete.Add(kvp.Key, kvp.Value);
01143                                                         isDeletionNeeded = true;
01144                                                 }
01145                                         }
01146                                 }
01147                                 i++;
01148                         }
01149 
01150                         dataSet.Tables[0].Rows[0]["RAIS_TIME_STAMP"] =
01151                                 validationDataSet.Tables[0].Rows[0]["RAIS_TIME_STAMP"];
01152                 }
01153                 #endregion
01154         }
01155 }
01156